[INFO] fetching crate happylock 0.5.0...
[INFO] checking happylock-0.5.0 against try#a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399 for pr-145770
[INFO] extracting crate happylock 0.5.0 into /workspace/builds/worker-3-tc2/source
[INFO] started tweaking crates.io crate happylock 0.5.0
[INFO] finished tweaking crates.io crate happylock 0.5.0
[INFO] tweaked toml for crates.io crate happylock 0.5.0 written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate happylock 0.5.0 on toolchain a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate happylock 0.5.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7c316fe929cac4279d814efb762f0661c1369d6a3b2488472d28500aa49c75c0
[INFO] running `Command { std: "docker" "start" "-a" "7c316fe929cac4279d814efb762f0661c1369d6a3b2488472d28500aa49c75c0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7c316fe929cac4279d814efb762f0661c1369d6a3b2488472d28500aa49c75c0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7c316fe929cac4279d814efb762f0661c1369d6a3b2488472d28500aa49c75c0", kill_on_drop: false }`
[INFO] [stdout] 7c316fe929cac4279d814efb762f0661c1369d6a3b2488472d28500aa49c75c0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+a2a6e871b05c7b8ecc9a3c8a20db1f39e995e399" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] ea56ce66e8fb0884c75b7f9b4fdfb36690bf20f39f73ed0c9048aab9c9e7446e
[INFO] running `Command { std: "docker" "start" "-a" "ea56ce66e8fb0884c75b7f9b4fdfb36690bf20f39f73ed0c9048aab9c9e7446e", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.170
[INFO] [stderr]    Compiling autocfg v1.4.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]     Checking smallvec v1.14.0
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]    Compiling mutants v0.0.3
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking happylock v0.5.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: struct `ReadLock` is never constructed
[INFO] [stdout]   --> src/rwlock.rs:61:8
[INFO] [stdout]    |
[INFO] [stdout] 61 | struct ReadLock<'l, T: ?Sized, R>(&'l RwLock<T, R>);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WriteLock` is never constructed
[INFO] [stdout]   --> src/rwlock.rs:70:8
[INFO] [stdout]    |
[INFO] [stdout] 70 | struct WriteLock<'l, T: ?Sized, R>(&'l RwLock<T, R>);
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/rwlock/read_lock.rs:132:15
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl<'l, T, R> ReadLock<'l, T, R> {
[INFO] [stdout]     | --------------------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub const fn new(rwlock: &'l RwLock<T, R>) -> Self {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `scoped_lock`, `scoped_try_lock`, `lock`, `try_lock`, `try_lock_no_key`, and `unlock` are never used
[INFO] [stdout]    --> src/rwlock/read_lock.rs:138:9
[INFO] [stdout]     |
[INFO] [stdout] 137 | impl<T, R: RawRwLock> ReadLock<'_, T, R> {
[INFO] [stdout]     | ---------------------------------------- associated items in this implementation
[INFO] [stdout] 138 |     pub fn scoped_lock<'a, Ret>(&'a self, key: impl Keyable, f: impl Fn(&'a T) -> Ret) -> Ret {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn scoped_try_lock<'a, Key: Keyable, Ret>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn lock(&self, key: ThreadKey) -> RwLockReadGuard<'_, T, R> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn try_lock(&self, key: ThreadKey) -> Result<RwLockReadGuard<'_, T, R>, ThreadKey> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub(crate) unsafe fn try_lock_no_key(&self) -> Option<RwLockReadRef<'_, T, R>> {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn unlock(guard: RwLockReadGuard<'_, T, R>) -> ThreadKey {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/rwlock/write_lock.rs:117:15
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl<'l, T, R> WriteLock<'l, T, R> {
[INFO] [stdout]     | ---------------------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub const fn new(rwlock: &'l RwLock<T, R>) -> Self {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `scoped_lock`, `scoped_try_lock`, `lock`, `try_lock`, and `unlock` are never used
[INFO] [stdout]    --> src/rwlock/write_lock.rs:123:9
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl<T, R: RawRwLock> WriteLock<'_, T, R> {
[INFO] [stdout]     | ----------------------------------------- associated items in this implementation
[INFO] [stdout] 123 |     pub fn scoped_lock<'a, Ret>(&'a self, key: impl Keyable, f: impl Fn(&'a mut T) -> Ret) -> Ret {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn scoped_try_lock<'a, Key: Keyable, Ret>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn lock(&self, key: ThreadKey) -> RwLockWriteGuard<'_, T, R> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn try_lock(&self, key: ThreadKey) -> Result<RwLockWriteGuard<'_, T, R>, ThreadKey> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn unlock(guard: RwLockWriteGuard<'_, T, R>) -> ThreadKey {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `mutex1` does not live long enough
[INFO] [stdout]    --> src/collection/boxed.rs:707:41
[INFO] [stdout]     |
[INFO] [stdout] 705 |         let mutex1 = Mutex::new(0);
[INFO] [stdout]     |             ------ binding `mutex1` declared here
[INFO] [stdout] 706 |         let mutex2 = Mutex::new(1);
[INFO] [stdout] 707 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex2]).is_some())
[INFO] [stdout]     |                 ------------------------------^^^^^^^-----------
[INFO] [stdout]     |                 |                             |
[INFO] [stdout]     |                 |                             borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 708 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `mutex1` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Option<collection::BoxedLockCollection<[&mutex::Mutex<i32, parking_lot::RawMutex>; 2]>>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 707 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex2]).is_some());
[INFO] [stdout]     |                                                                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `mutex2` does not live long enough
[INFO] [stdout]    --> src/collection/boxed.rs:707:50
[INFO] [stdout]     |
[INFO] [stdout] 706 |         let mutex2 = Mutex::new(1);
[INFO] [stdout]     |             ------ binding `mutex2` declared here
[INFO] [stdout] 707 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex2]).is_some())
[INFO] [stdout]     |                 ---------------------------------------^^^^^^^--
[INFO] [stdout]     |                 |                                      |
[INFO] [stdout]     |                 |                                      borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 708 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `mutex2` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Option<collection::BoxedLockCollection<[&mutex::Mutex<i32, parking_lot::RawMutex>; 2]>>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 707 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex2]).is_some());
[INFO] [stdout]     |                                                                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `mutex1` does not live long enough
[INFO] [stdout]    --> src/collection/boxed.rs:713:41
[INFO] [stdout]     |
[INFO] [stdout] 712 |         let mutex1 = Mutex::new(0);
[INFO] [stdout]     |             ------ binding `mutex1` declared here
[INFO] [stdout] 713 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex1]).is_none())
[INFO] [stdout]     |                 ------------------------------^^^^^^^-----------
[INFO] [stdout]     |                 |                             |
[INFO] [stdout]     |                 |                             borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 714 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `mutex1` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Option<collection::BoxedLockCollection<[&mutex::Mutex<i32, parking_lot::RawMutex>; 2]>>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 713 |         assert!(BoxedLockCollection::try_new([&mutex1, &mutex1]).is_none());
[INFO] [stdout]     |                                                                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `mutex1` does not live long enough
[INFO] [stdout]    --> src/collection/boxed.rs:862:11
[INFO] [stdout]     |
[INFO] [stdout] 856 |         let mutex1 = Mutex::new("foo");
[INFO] [stdout]     |             ------ binding `mutex1` declared here
[INFO] [stdout] ...
[INFO] [stdout] 862 |         assert!(mutex1.try_lock(key).is_ok())
[INFO] [stdout]     |                 ^^^^^^--------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 863 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `mutex1` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<mutex::MutexGuard<'_, &str, parking_lot::RawMutex>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 862 |         assert!(mutex1.try_lock(key).is_ok());
[INFO] [stdout]     |                                              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `lock1` does not live long enough
[INFO] [stdout]    --> src/collection/boxed.rs:874:11
[INFO] [stdout]     |
[INFO] [stdout] 868 |         let lock1 = RwLock::new("foo");
[INFO] [stdout]     |             ----- binding `lock1` declared here
[INFO] [stdout] ...
[INFO] [stdout] 874 |         assert!(lock1.try_write(key).is_ok())
[INFO] [stdout]     |                 ^^^^^---------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 875 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `lock1` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<rwlock::RwLockWriteGuard<'_, &str, parking_lot::RawRwLock>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 874 |         assert!(lock1.try_write(key).is_ok());
[INFO] [stdout]     |                                              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `collection` does not live long enough
[INFO] [stdout]    --> src/collection/owned.rs:693:11
[INFO] [stdout]     |
[INFO] [stdout] 689 |         let collection = OwnedLockCollection::new((Mutex::new("foo"), Mutex::new("bar")));
[INFO] [stdout]     |             ---------- binding `collection` declared here
[INFO] [stdout] ...
[INFO] [stdout] 693 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ^^^^^^^^^^--------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 694 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `collection` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(MutexRef<'_, &str, parking_lot::RawMutex>, MutexRef<'_, &str, parking_lot::RawMutex>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 693 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `collection` does not live long enough
[INFO] [stdout]    --> src/collection/owned.rs:703:11
[INFO] [stdout]     |
[INFO] [stdout] 699 |         let collection = OwnedLockCollection::new((RwLock::new("foo"), RwLock::new("bar")));
[INFO] [stdout]     |             ---------- binding `collection` declared here
[INFO] [stdout] ...
[INFO] [stdout] 703 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ^^^^^^^^^^--------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 704 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `collection` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(RwLockWriteRef<'_, &str, parking_lot::RawRwLock>, RwLockWriteRef<'_, &str, parking_lot::RawRwLock>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 703 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `mutexes` does not live long enough
[INFO] [stdout]    --> src/collection/ref.rs:728:43
[INFO] [stdout]     |
[INFO] [stdout] 727 |         let mutexes = (Mutex::new("foo"), Mutex::new("bar"));
[INFO] [stdout]     |             ------- binding `mutexes` declared here
[INFO] [stdout] 728 |         let collection = RefLockCollection::new(&mutexes);
[INFO] [stdout]     |                                                 ^^^^^^^^ borrowed value does not live long enough
[INFO] [stdout] ...
[INFO] [stdout] 732 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ------------------------ a temporary with access to the borrow is created here ...
[INFO] [stdout] 733 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `mutexes` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(MutexRef<'_, &str, parking_lot::RawMutex>, MutexRef<'_, &str, parking_lot::RawMutex>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 732 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `collection` does not live long enough
[INFO] [stdout]    --> src/collection/ref.rs:732:11
[INFO] [stdout]     |
[INFO] [stdout] 728 |         let collection = RefLockCollection::new(&mutexes);
[INFO] [stdout]     |             ---------- binding `collection` declared here
[INFO] [stdout] ...
[INFO] [stdout] 732 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ^^^^^^^^^^--------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 733 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `collection` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(MutexRef<'_, &str, parking_lot::RawMutex>, MutexRef<'_, &str, parking_lot::RawMutex>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 732 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `locks` does not live long enough
[INFO] [stdout]    --> src/collection/ref.rs:739:43
[INFO] [stdout]     |
[INFO] [stdout] 738 |         let locks = (RwLock::new("foo"), RwLock::new("bar"));
[INFO] [stdout]     |             ----- binding `locks` declared here
[INFO] [stdout] 739 |         let collection = RefLockCollection::new(&locks);
[INFO] [stdout]     |                                                 ^^^^^^ borrowed value does not live long enough
[INFO] [stdout] ...
[INFO] [stdout] 743 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ------------------------ a temporary with access to the borrow is created here ...
[INFO] [stdout] 744 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `locks` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(RwLockWriteRef<'_, &str, parking_lot::RawRwLock>, RwLockWriteRef<'_, &str, parking_lot::RawRwLock>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 743 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `collection` does not live long enough
[INFO] [stdout]    --> src/collection/ref.rs:743:11
[INFO] [stdout]     |
[INFO] [stdout] 739 |         let collection = RefLockCollection::new(&locks);
[INFO] [stdout]     |             ---------- binding `collection` declared here
[INFO] [stdout] ...
[INFO] [stdout] 743 |         assert!(collection.try_lock(key).is_ok())
[INFO] [stdout]     |                 ^^^^^^^^^^--------------
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 borrowed value does not live long enough
[INFO] [stdout]     |                 a temporary with access to the borrow is created here ...
[INFO] [stdout] 744 |     }
[INFO] [stdout]     |     -
[INFO] [stdout]     |     |
[INFO] [stdout]     |     `collection` dropped here while still borrowed
[INFO] [stdout]     |     ... and the borrow might be used here, when that temporary is dropped and runs the destructor for type `Result<LockGuard<(RwLockWriteRef<'_, &str, parking_lot::RawRwLock>, RwLockWriteRef<'_, &str, parking_lot::RawRwLock>)>, key::ThreadKey>`
[INFO] [stdout]     |
[INFO] [stdout] help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
[INFO] [stdout]     |
[INFO] [stdout] 743 |         assert!(collection.try_lock(key).is_ok());
[INFO] [stdout]     |                                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0597`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `happylock` (lib test) due to 11 previous errors
[INFO] running `Command { std: "docker" "inspect" "ea56ce66e8fb0884c75b7f9b4fdfb36690bf20f39f73ed0c9048aab9c9e7446e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ea56ce66e8fb0884c75b7f9b4fdfb36690bf20f39f73ed0c9048aab9c9e7446e", kill_on_drop: false }`
[INFO] [stdout] ea56ce66e8fb0884c75b7f9b4fdfb36690bf20f39f73ed0c9048aab9c9e7446e
